package cn.edu.cug.cs.gtl.apis.render.projectors;

import cn.edu.cug.cs.gtl.apis.render.basics.Plane;
import cn.edu.cug.cs.gtl.apis.render.basics.Vec2f;
import cn.edu.cug.cs.gtl.apis.render.basics.Vec3f;

public interface PlaneProjector extends Projector{
    /**
     * Gets the plane to use.
     * @return
     */
    Plane getPlane();

    /**
     Gets a vector given the current mouse point.
     * @param mousePosition
     * @return
     */
    Vec3f	getVector(Vec2f mousePosition);

    /**
     *
     Gets a vector on this plane given two normalized mouse positions.
     * @param mousePosition1
     * @param mousePosition2
     * @return
     */
    Vec3f	getVector(Vec2f mousePosition1, Vec2f mousePosition2);

    /**
     *
     Gets whether the projector should be oriented towards the eye.
     * @return
     */
    boolean	isOrientToEye();

    /**
     *
     Sets whether the projector should be oriented towards the eye.
     * @param orientToEye
     */
    void	setOrientToEye(boolean orientToEye);

    /**
     * Sets the plane to use.
     * @param plane
     */
    void	setPlane(Plane plane);

    /**
     * Sets the initial mouse position.
     * @param mousePosition
     */
    void	setStartPosition(Vec2f mousePosition);

    /**
     * Sets the initial position from a point on the projector.
     * @param point
     */
    void	setStartPosition(Vec3f point);

}
